/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

/**
 * @author Nolberto Castellanos Rodriguez
 * @author Yurani Alejandra Salamanca Lotero
 *
 * Clase que representa una expresion logica
 */
public class ExpresionLogica {

//	-------------------------------------------------------------------------------------------------
//	ATRIBUTOS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Atributo que contiene las expresiones condicionales
	 */
	private ArrayList<ExpresionesCondicionales> expresionesCondicionales;
	
	/**
	 * Atributo que contiene los conectores
	 */
	private ArrayList<Conector> conectores;
	
//	-------------------------------------------------------------------------------------------------
//	METODOS
//	-------------------------------------------------------------------------------------------------	
	
	/**
	 * Metodo que permite agregar hojas al nodo de la clase
	 * @return el nodo de la clase con sus hojas
	 */
	public  DefaultMutableTreeNode getArbolVisual(){
		DefaultMutableTreeNode miRaiz =  new  DefaultMutableTreeNode("Expresion Logica");
		
		for (ExpresionesCondicionales expresionCondicional : expresionesCondicionales) 
		{
			miRaiz.add(expresionCondicional.getArbolVisual());
		}
		for (Conector conector : conectores) 
		{
			miRaiz.add(conector.getArbolVisual());
		}
		
		return miRaiz;
	}	
	
	/**
	 * @return
	 */
	public String getJavaCode() {
		
		String retornable = "";
		
		for (int i = 0; i < expresionesCondicionales.size(); i++) {
			if(i>0 && conectores != null && i<conectores.size()){
				String conector = "";
				if(conectores.get(i).getConector().getLexema().equals("and"))
					conector = "&&";
				else if(conectores.get(i).getConector().getLexema().equals("or"))
					conector = "||";
				
				retornable +=" " + conector  + " ";
				
			}
				
			retornable += expresionesCondicionales.get(i).getJavaCode();
		}
		
		return retornable;
	}
	
//	-------------------------------------------------------------------------------------------------
//	CONSTRUCTOR
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * @param expresionesCondicionales
	 * @param conectores
	 */
	public ExpresionLogica(
			ArrayList<ExpresionesCondicionales> expresionesCondicionales,
			ArrayList<Conector> conectores) {
		super();
		this.expresionesCondicionales = expresionesCondicionales;
		this.conectores = conectores;
	}
	
//	-------------------------------------------------------------------------------------------------
//	Getters & Setters
//	-------------------------------------------------------------------------------------------------
	/**
	 * Metodo que nos retorna el valor de expresionesCondicionales
	 * @return  expresionesCondicionales. Valor retornado
	 */
	public ArrayList<ExpresionesCondicionales> getExpresionesCondicionales() {
		return expresionesCondicionales;
	}


	/**
	 * Metodo que permite asignar el valor de expresionesCondicionales
	 * @param expresionesCondicionales. Valor a asignar expresionesCondicionales
	 */
	public void setExpresionesCondicionales(
			ArrayList<ExpresionesCondicionales> expresionesCondicionales) {
		this.expresionesCondicionales = expresionesCondicionales;
	}

	/**
	 * Metodo que nos retorna el valor de conectores
	 * @return  conectores. Valor retornado
	 */
	public ArrayList<Conector> getConectores() {
		return conectores;
	}

	/**
	 * Metodo que permite asignar el valor de conectores
	 * @param conectores. Valor a asignar conectores
	 */
	public void setConectores(ArrayList<Conector> conectores) {
		this.conectores = conectores;
	}

}
